package com.sunplus.common.core.ossstorage.inteface;

import java.io.InputStream;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;

/**
*
* @author shaoqi
* @date 下午 2:50 2021/2/7 0007
*/

public interface IStorageProvider {

    //region 文件是否存在

    /**
     * 判断文件是否存
     * @param path 文件路径
     * @return 是否存在
     */
    Boolean fileExists(String path);

    /**
     * 获取文件对象
     * @param path 文件路径
     * @return 返回文件对象
     */
    IStorageFile getFile(String path);

    /**
     * 获取文件列表
     * @param path 文件夹路径
     * @return 返回的文件列表
     */
    Collection<IStorageFolder> listFiles(String path);

    /**
     * 删除文件
     * @param path 文件路径
     */
    void deleteFile(String path);

    /**
     * 复制文件
     * @param originalPath 原先的文件地址
     * @param duplicatePath 需要复制的文件路径
     */
    void copyFile(String originalPath,String duplicatePath);


    /**
     * 创建文件
     * @param path 文件路径
     * @return 文件对象
     */
    IStorageFolder createFile(String path);

    /**
     * 尝试保存流中的数据(返回是否成功)
     * @param path 保存文件的路径
     * @param inputStream 文件的输入流 通过这个进行保存
     * @return 是否保存成功
     */
    boolean trySaveStream(String path, InputStream inputStream);


    /**
     * 保存文件流
     * @param path 保存文件地址
     * @param inputStream 文件流
     */
    void saveStream(String path, InputStream inputStream);

    //endregion



    //region 文件夹操作

    /**
     * 文件夹是否存储
     * @param path 文件夹路径
     * @return 是否存在
     */
    Boolean folderExists(String path);


    /**
     * 获取路径下的文件夹列表
     * @param path 文件夹路径地址
     * @return 抽象文件夹的集合B
     */
    Collection<IStorageFolder> listFolders(String path);

    /**
     * 尝试创建文件夹(返回成功或者失败)
     * @param path 文件夹名称
     * @return 是否保存成功
     */
    Boolean tryCreateFolder(String path);

    /**
     * 创建文件夹
     * @param path 文件夹路径
     */
    void createFolder(String path);

    /**
     * 删除文件夹名字
     * @param path
     */
    void deleteFolder(String path);

    /**
     * 重新命名文件夹
     * @param oldPath 原先文件名字
     * @param newPath 后来的文件名字
     */
    void renameFolder(String oldPath,String newPath);
    //endregion

}
